home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Light ROM 1
/
LIGHT-ROM 1 (Amiga Library Services)(1994).iso
/
ffdisks
/
d883.lha
/
BBBBS
/
BBBBS59.lha
/
rexx
/
bbsExtDL.baud
< prev
next >
Wrap
Text File
|
1993-06-02
|
15KB
|
512 lines
/* $VERS: 5.9 bbsExtDL.baud 2 June 1993 (2.6.93)
copyright 1992 Richard Lee Stockton FREELY DISTRIBUTABLE
Allows BBBBS user to download from extra devices like CD drives.
Keeps track of time left to this user, and watches for hangup.
Just ignores file or directory names that contain spaces
because BBBBS would be unable to download them anyway.
Ignores icons (files that end in .info). Also excludes certain
drawers on certain CDs that contain copyright files. Other
specific files or directories can be excluded by adding
their paths to the exclude variable below.
*/
exclude=''
/* HyperMedia FredFish CD FFCD_800 - limited to 2 drawers */
exclude=exclude 'FFCD_800:C FFCD_800:DEVS'
exclude=exclude 'FFCD_800:L FFCD_800:LIBS'
exclude=exclude 'FFCD_800:S FFCD_800:FONTS'
exclude=exclude 'FFCD_800:T FFCD_800:PREFS'
exclude=exclude 'FFCD_800:SYSTEM FFCD_800:SID'
exclude=exclude 'FFCD_800:Locators FFCD_800:UTILITIES'
exclude=exclude 'FFCD_800:CATALOGS FFCD_800:CDS.FILES'
exclude=exclude 'FFCD_800:EXPANSION'
exclude=exclude 'FFCD_800:Read_Me FFCD_800:TRASHCAN'
exclude=exclude 'FFCD_800:SHELL FFCD_800:TOOLS'
exclude=exclude 'FFCD_800:cdtv.tm FFCD_800:Node.rinfo'
exclude=exclude 'FFCD_800:PARNET FFCD_800:START_PARNET'
exclude=exclude 'FFCD_800:Copy_Fish FFCD_800:CD_Sampler'
exclude=exclude 'FFCD_800:start.pic FFCD_800:ParNet_Switch'
/* HyperMedia FredFish Online CD version 1.5 - limited to 2 drawers */
exclude=exclude 'FFONL_V1.5:LZH_FILES/CATALOGS'
exclude=exclude 'FFONL_V1.5:C FFONL_V1.5:DEVS'
exclude=exclude 'FFONL_V1.5:L FFONL_V1.5:LIBS'
exclude=exclude 'FFONL_V1.5:S FFONL_V1.5:FONTS'
exclude=exclude 'FFONL_V1.5:T FFONL_V1.5:PREFS'
exclude=exclude 'FFONL_V1.5:SYSTEM FFONL_V1.5:SID'
exclude=exclude 'FFONL_V1.5:AQUARIUM FFONL_V1.5:UTILITIES'
exclude=exclude 'FFONL_V1.5:CATALOGS FFONL_V1.5:CDS.FILES'
exclude=exclude 'FFONL_V1.5:EXPANSION FFONL_V1.5:READMEMASTER'
exclude=exclude 'FFONL_V1.5:READ_ME FFONL_V1.5:TRASHCAN'
exclude=exclude 'FFONL_V1.5:SHELL FFONL_V1.5:TOOLS'
exclude=exclude 'FFONL_V1.5:CDTV.TM FFONL_V1.5:NODE.RINFO'
exclude=exclude 'FFONL_V1.5:PARNET FFONL_V1.5:START_PARNET'
exclude=exclude 'FFONL_V1.5:COPYRITE.TXT'
/* HyperMedia FredFish Online CD version 1.4 - limited to 2 drawers */
exclude=exclude 'FFONL_V1.4:LZH_FILES/CATALOGS'
exclude=exclude 'FFONL_V1.4:C FFONL_V1.4:DEVS'
exclude=exclude 'FFONL_V1.4:L FFONL_V1.4:LIBS'
exclude=exclude 'FFONL_V1.4:S FFONL_V1.4:FONTS'
exclude=exclude 'FFONL_V1.4:T FFONL_V1.4:PREFS'
exclude=exclude 'FFONL_V1.4:SYSTEM FFONL_V1.4:SID'
exclude=exclude 'FFONL_V1.4:AQUARIUM FFONL_V1.4:UTILITIES'
exclude=exclude 'FFONL_V1.4:CATALOGS FFONL_V1.4:CDS.FILES'
exclude=exclude 'FFONL_V1.4:EXPANSION FFONL_V1.4:READMEMASTER'
exclude=exclude 'FFONL_V1.4:READ_ME FFONL_V1.4:TRASHCAN'
exclude=exclude 'FFONL_V1.4:SHELL FFONL_V1.4:TOOLS'
exclude=exclude 'FFONL_V1.4:CDTV.TM FFONL_V1.4:NODE.RINFO'
exclude=exclude 'FFONL_V1.4:PARNET FFONL_V1.4:START_PARNET'
exclude=exclude 'FFONL_V1.4:COPYRITE.TXT'
/* HyperMedia FredFish CD version 1.2 - limited to 3 drawers */
exclude=exclude 'FFCD_V1.2:LZH_FILES/CATALOGS'
exclude=exclude 'FFCD_V1.2:C FFCD_V1.2:DEVS'
exclude=exclude 'FFCD_V1.2:L FFCD_V1.2:LIBS'
exclude=exclude 'FFCD_V1.2:S FFCD_V1.2:FONTS'
exclude=exclude 'FFCD_V1.2:T FFCD_V1.2:PREFS'
exclude=exclude 'FFCD_V1.2:SYSTEM FFCD_V1.2:SID'
exclude=exclude 'FFCD_V1.2:AQUARIUM FFCD_V1.2:UTILITIES'
exclude=exclude 'FFCD_V1.2:CATALOGS FFCD_V1.2:CDS.FILES'
exclude=exclude 'FFCD_V1.2:EXPANSION FFCD_V1.2:READMEMASTER'
exclude=exclude 'FFCD_V1.2:READ_ME FFCD_V1.2:TRASHCAN'
exclude=exclude 'FFCD_V1.2:SHELL'
exclude=exclude 'FFCD_V1.2:CDTV.TM FFCD_V1.2:CD_SAMPLER'
/* Xetec Fish and More Vols I and II */
exclude=exclude 'FISH_AND_MORE:C FISH_AND_MORE:SYSTEM FISH_AND_MOREII:C'
exclude=UPPER(exclude)
SIGNAL ON BREAK_C
SIGNAL ON BREAK_E
PARSE ARG name level maxtime linesperpage colorflag devlist
lists.=''
lists.0=0
maxtime=maxtime-30
CALL TIME('R')
CR='0D'x
def=''
pen3='
'
IF colorflag~=1 THEN
DO
def=''
pen3=''
END
SAY CR
SAY 'This routine lets you select a list of files to be downloaded'CR
SAY 'from one or more extra devices. For example, CD-ROM drives.'CR
SAY CR
SAY 'Note that it is more efficient for all concerned if you use the'CR
SAY 'various contents files available here (or Aquarium, in the case'CR
SAY 'of Fish Disks), to make your selections before you call. Thanks!'CR
SAY CR
selected=''
path=''
templist=devlist
devlist=''
longest=0
CALL PRAGMA('W','N') /* disk requesters OFF */
DO i=1 TO WORDS(templist)
test=WORD(templist,i)
IF ~EXISTS(test) THEN ITERATE i
CALL PRAGMA('D',test)
test2=PRAGMA('D')
IF WORDS(test2)>1 THEN test2=test
devlist=STRIP(devlist test2)
IF LENGTH(test2)>longest THEN longest=LENGTH(test2)
END
cols=76%(longest+8)
IF devlist='' THEN
DO
SAY CR
SAY '*** Sorry, no External Devices are available! ***'CR
SAY CR
EXIT('')
END
picklist=devlist
IF WORDS(picklist)=1 THEN
DO
path=picklist
IF RIGHT(path,1)~=':' THEN path=path'/'
picklist=makepicklist()
END
ELSE
DO
lists.0=1
dirs=WORDS(devlist)
END
CALL checkdcd()
OPTIONS PROMPT 'Press RETURN'
PULL junk
DO loop=1
CALL checkdcd()
test=TIME('E')
IF test>(maxtime-100) THEN
DO
SAY CR
IF test>maxtime THEN
DO
SAY '*** This session''s time is expiring! ***'CR
SAY CR
LEAVE loop
END
ELSE SAY '*** Less than 2 minutes remaining! ***'CR
SAY CR
END
filename=pick(picklist)
IF filename='' THEN
DO
temp=path
IF RIGHT(temp,1)='/' THEN temp=LEFT(temp,LENGTH(temp)-1)
IF FIND(UPPER(devlist),UPPER(temp))>0 THEN
DO
IF WORDS(devlist)=1 THEN ITERATE loop
picklist=devlist
path=''
ITERATE loop
END
ELSE
DO
test=RIGHT(path,1)
IF test='/' THEN path=LEFT(path,LENGTH(path)-1)
slash=LASTPOS('/',path)
IF slash=0 THEN slash=LASTPOS(':',path)
path=LEFT(path,slash)
END
END
IF filename=':-)' THEN ITERATE loop
tempath=path||filename
temp=WORD(STATEF(tempath),1)
IF temp='FILE' THEN
DO
IF FIND(UPPER(selected),UPPER(tempath))=0 THEN
selected=selected tempath
ELSE selected=DELWORD(selected,FIND(UPPER(selected),UPPER(tempath)),1)
ITERATE loop
END
ELSE IF temp='DIR' THEN
DO
path=tempath
test=RIGHT(path,1)
IF test~='' & test~='/' & test~=':' THEN path=path'/'
END
ELSE IF UPPER(filename)='DONE' THEN LEAVE loop
IF path~='' THEN picklist=makepicklist()
END
selected=STRIP(selected)
IF selected~='' THEN
DO
SAY CR
SAY 'You may choose to have your selection(s) archived using LhA.'CR
SAY 'This makes downloading faster, if the files are not already compressed.'CR
SAY 'The completed archive will be attached to email addressed to you.'CR
SAY CR
OPTIONS PROMPT 'Archive selected files? (nY) > '
PULL temp
IF LEFT(temp,1)~='N' THEN
DO
ADDRESS AREXX bbsArcExt.rexx name selected
selected=''
SAY CR
SAY 'BBBBS will notify you online when your archive is ready.'CR
SAY CR
END
END
SAY 'Returning to the BBS...'CR
SAY CR
EXIT selected
checkdcd:
IF ADDRESS()='BAUD' THEN
DO
dcd
IF RC=0 THEN
DO
CALL DELAY(128)
dcd
IF RC=0 THEN
DO
SAY CR
SAY '*** Lost Carrier!?! ***'CR
EXIT('')
END
END
END
RETURN
makepicklist:
IF STORAGE()<100000 THEN
DO
lists.=''
lists.0=0
IF WORDS(devlist)>1 THEN
DO
lists.0=1
lists.1.0=devlist
END
END
DO i=1 TO lists.0
IF path=lists.i THEN RETURN(lists.i.0)
END
IF path='' THEN RETURN('')
SAY 'Loading...'CR
CALL FileList(path'*',filelist,'F','N')
IF filelist.0>1 THEN CALL QSORT(1,filelist.0,filelist)
CALL FileList(path'*',dirlist,'D','N')
IF dirlist.0>1 THEN CALL QSORT(1,dirlist.0,dirlist)
plist=''
dirs=0
longest=0
DO i=1 TO filelist.0
IF WORDS(filelist.i)~=1 THEN ITERATE i
IF filelist.i='' THEN ITERATE i
IF UPPER(RIGHT(filelist.i,5))='.INFO' THEN ITERATE i
IF FIND(exclude,UPPER(path||filelist.i))>0 THEN ITERATE i
plist=STRIP(plist filelist.i)
IF LENGTH(filelist.i)>longest THEN longest=LENGTH(filelist.i)
END
DO i=1 TO dirlist.0
IF WORDS(dirlist.i)~=1 THEN ITERATE i
IF UPPER(RIGHT(dirlist.i,5))='.INFO' THEN ITERATE i
IF FIND(exclude,UPPER(path||dirlist.i))>0 THEN ITERATE i
plist=STRIP(plist dirlist.i)
IF LENGTH(dirlist.i)>longest THEN longest=LENGTH(dirlist.i)
dirs=dirs+1
END
cols=76%(longest+9)
lists.0=lists.0+1
i=lists.0
lists.i=path
lists.i.0=plist
DROP filelist. dirlist.
RETURN(plist)
pick:
PARSE ARG list
selection=''
DO k=1 TO lists.0
IF path=lists.k THEN LEAVE k
END
IF ~DATATYPE(lists.k.ROWS,'N') THEN
DO
items=WORDS(list)
IF items<75 & dirs<15 THEN SAY 'Formatting' items 'items...'CR
ELSE SAY 'Please be patient, formatting' items 'items may take a while...'CR
lists.k.ROWS=(items%cols)+((items//cols)>0)
IF cols>items THEN cols=items
IF cols<1 THEN cols=1
longest=(76%cols)-8
lists.k=path
DO j=0 TO cols-1
DO i=1 TO lists.k.ROWS
thisnum=j*lists.k.ROWS+i
IF thisnum<=items THEN
DO
thisitem=WORD(list,thisnum)
filestat=STATEF(path||thisitem)
thisitem=LEFT(thisitem,longest)' '
IF WORD(filestat,1)='DIR' THEN
lists.k.i=lists.k.i||pen3'(dir) 'thisitem||def
ELSE
DO
bytes=WORD(filestat,2)
IF bytes<10000 THEN
lists.k.i=lists.k.i||RIGHT(bytes,5) thisitem
ELSE IF bytes>1023999 THEN
lists.k.i=lists.k.i||RIGHT(bytes%1024000,4)'m' thisitem
ELSE lists.k.i=lists.k.i||RIGHT(bytes%1024,4)'k' thisitem
END
END
END
END
END
IF selected~='' THEN
DO
SAY CR
SAY pen3'selected:'def||CR
DO i=1 TO WORDS(selected)
SAY WORD(selected,i)||CR
END
END
SAY CR
SAY 'current path ='pen3 path||def||CR
SAY LEFT('-',75,'-')||CR
OPTIONS PROMPT ' - ['pen3'N'def']on-stop ['pen3'Q'def']uit ['pen3'RETURN'def']=Continue - '
DO i=1 TO lists.k.ROWS
SAY TRIM(lists.k.i)||CR
IF (i+2)//(linesperpage-1)=0 & nonstop~=1 THEN
DO
CALL whodat()
PULL junk
IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
IF colorflag=1 THEN SAY '1B'x'M'||LEFT('',60)||'1B'x'M'||CR
END
END
nonstop=0
SAY LEFT('-',75,'-')||CR
CALL whodat()
readflag=0
DO getloop=1
pstring=showtime()' Enter ''?'' for HELP > '
OPTIONS PROMPT pstring
PARSE PULL selection
IF selection='?' THEN
DO
CALL help()
OPTIONS PROMPT 'Press RETURN'
PULL junk
selection=';-)'
LEAVE getloop
END
IF WORDS(selection)>1 THEN
DO
IF UPPER(selection)='SELECT ALL' THEN
DO
CALL selall(path)
selection=':-)'
LEAVE getloop
END
ELSE IF UPPER(WORD(selection,1))='READ' THEN
DO
readflag=1
selection=STRIP(DELWORD(selection,1,1))
END
END
i=FIND('DONE' UPPER(list),UPPER(selection))
IF i=0 THEN ITERATE getloop
IF selection='' & path='' THEN ITERATE getloop
ELSE IF i>1 THEN selection=WORD(list,i-1)
IF readflag=1 THEN
DO
endtest=UPPER(RIGHT(selection,4))
IF FIND('.ARC .DMS .LZH .LHA .ZIP .ZOO',endtest)>0 THEN
DO
CALL Contents.rexx(path||selection)
IF EXISTS('RAM:CONTENTS') THEN CALL showtext('RAM: CONTENTS')
END
ELSE CALL showtext(path selection)
readflag=0
selection=';-)'
END
LEAVE getloop
END
RETURN selection
selall:
PARSE ARG dir .
SAY dir||CR
x=RIGHT(dir,1)
IF x~='/' & x~=':' THEN dir=dir'/'
CALL FileList(dir'*',filelist,'F','F')
DO i=1 TO filelist.0
selected=STRIP(selected filelist.i)
END
IF FileList(dir'*',dirlist,'D','F')=0 THEN RETURN
DO j=1 TO dirlist.0
CALL selall(dirlist.j)
END
RETURN
showtext:
PARSE ARG tpath' 'textfile
test=RIGHT(tpath,1)
IF test~='' & test~=':' & test~='/' THEN tpath=tpath'/'
x=OPEN(f,STRIP(tpath||textfile),'R')
IF x=0 THEN RETURN
test=READCH(f,64)
mask=XRANGE(,'06'x)||XRANGE('0E'x,'1A'x)||XRANGE('1C'x,'1F'x)
IF VERIFY(test,mask,'M')>0 THEN
DO
CALL CLOSE(f)
testloc=VERIFY(test,mask,'M')
SAY '*** not an archive or a text file! ***'CR
SAY 'Character number' testloc 'is ASCII' C2D(SUBSTR(test,testloc,1))||CR
RETURN
END
CALL SEEK(f,0,'B')
OPTIONS PROMPT ' - ['pen3'N'def']on-stop ['pen3'Q'def']uit ['pen3'RETURN'def']=Continue - '
SAY CR
SAY '-' tpath||textfile '-'CR
DO i=1 WHILE ~EOF(f)
SAY COMPRESS(READLN(f),CR||'0C'x)||CR
IF i//(linesperpage-1)=0 & nonstop~=1 THEN
DO
CALL whodat()
PULL junk
IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
IF colorflag=1 THEN SAY '1B'x'M'||LEFT('',60)||'1B'x'M'||CR
END
END
CALL CLOSE(f)
IF i//(linesperpage-1)>1 THEN PULL junk
nonstop=0
RETURN
whodat:
IF ADDRESS()~='BAUD' THEN RETURN
MSG RIGHT(' ',66-LENGTH(name)) '1B'x'M'||'
'||'
'||' 'name' level 'level' '||'
'
CALL checkdcd()
RETURN
help:
SAY CR
SAY CR
SAY pen3'- HELP -'def
SAY CR
SAY 'You can navigate through directory levels using the following commands.'CR
SAY 'Remember that the name must appear in the display before you can select it.'CR
SAY CR
SAY 'To select an item from the displayed list, enter its name as displayed.'CR
SAY 'If the selected item is a' pen3'directory'def', its contents will be displayed.'CR
SAY 'If the selected item is a file, it is added to the ''selected'' list.'CR
SAY 'To remove a selected file from the list, enter its name again.'CR
SAY CR
SAY 'To display the parent directory, enter an ''empty'' RETURN'CR
SAY 'To read a textfile or see the contents of an archive, enter READ filename.'CR
SAY 'To select ALL items from the current display, including the contents of all'CR
SAY 'displayed directories and their sub-directories, enter SELECT ALL.'CR
SAY CR
SAY 'Enter'pen3 'DONE' def'to return to the BBS (and download any selected files)'CR
SAY CR
RETURN
showtime:
mins=(maxtime-TIME('E'))%60
secs=TRUNC((maxtime-TIME('E'))//60)
IF secs<10 THEN secs='0'secs
RETURN 'Time Remaining: 'mins':'secs
BREAK_E:
SAY CR
SAY pen3'*** CONTROL-E BREAK ***'def||CR
i=999999
RETURN ''
BREAK_C:
SAY CR
EXIT ''
/* bbsExtDL.baud */